import axios, { type AxiosRequestConfig } from 'axios'
import { useUserInfoStore } from '@/stores/modules/user'

const instance = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 5000
})

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    const userInfo = useUserInfoStore()
    // 请求成功做点什么
    const token = userInfo.$state.token
    // 统一设置token
    if (token && config.headers) {
      config.headers.set('token', `${token.accessToken}`)
    }
    return config
  },
  function (error) {
    // 对请求错误做点什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应成功做点什么
    const { success, message, data } = response.data
    console.log(success)

    // 判断当前请求是否成功
    if (success) {
      return data
    } else {
      // 请求失败，业务失败，消息提示
      ElMessage.error(message)
      return Promise.reject(new Error(message))
    }
  },
  function (error) {
    // 对响应错误做点什么
    ElMessage.error(error.message)
    return Promise.reject(error)
  }
)

// 指定返回数据类型，类型推断提示
export default <T = any>(config: AxiosRequestConfig) => {
  return instance(config).then((data) => {
    return data as T
  })
}
